package demo2;

import java.util.concurrent.TimeUnit;

/**
 *  演示wait()和notify()
 * 注意：wait和notify必须搭配synchronized一起使用，因为他们是针对锁对象进行等待的唤醒的，
 * 就像一个人卖包子，别人买包子的时候，他没做好，叫别人等他做好，他做好了叫别人，这个卖包子的人就是锁对象
 * 注意，notify(),随机唤醒一个
 *      notifyAll(),唤醒所有的
 * notify()可以空喊就像卖包子的老板做好了哟喝一声
 * wait()不可以空等没人喊，一直阻塞怎么行
 * jion()是等另一个线程执行结束
 * wait()是等待资源准备好  注意两者区别，一个是Thread类中方法，一个是Object类中的方法
 */
public class DEMO_07 {
    public static void main(String[] args) {
        Object loker=new Object();
        Thread t1 =new Thread(()->{
            while (true){
                System.out.println("调用wait方法之前");
                //执行自己的代码逻辑
                //等待资源准备好
                synchronized (loker){
                    try {
                        loker.wait();
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                }
                System.out.println("调用wait方法之后");
                System.out.println("===========");
                try {
                    TimeUnit.SECONDS.sleep(1);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }
        });
        Thread t2 =new Thread(()->{
            while (true){
                System.out.println("调用notify方法之前");
                synchronized (loker){
                    loker.notify();
                }
                System.out.println("调用notify方法之后");
                try {
                    TimeUnit.SECONDS.sleep(1);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }
        });
        t1.start();
        t2.start();
    }
}
